/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op;

import core.QuebraString;
import java.util.Map;
import java.util.StringTokenizer;

/**
 *
 * @author Jônatas
 */
public class QuebraStringSiemens implements QuebraString {

    public EntradaAbstrata quebraString(Map<String, Object> parametersMap) throws Exception {

        // 20.04.11 14:40:57 01 638               00:00:55 99849282             2

        String line = (String) parametersMap.get("line");
        StringTokenizer tokenizer = new StringTokenizer(line);

        EntradaAbstrata entrada = new Ligacao();

        entrada.setDataOrigemLigacao(EntradaAbstrata.criaDate(tokenizer.nextToken(), tokenizer.nextToken()));

        String plano = tokenizer.nextToken();

        entrada.setNumeroDeOrigem(new Telefone(tokenizer.nextToken(), true));

        String temp = "";

        boolean moreTokens = true;

        do {
            temp = tokenizer.nextToken();
            moreTokens = tokenizer.hasMoreTokens();
        } while (moreTokens && !temp.matches("[0-9]{2}:[0-9]{2}:[0-9]{2}"));

        if (!moreTokens) {
            return null;
        }

        entrada.setDuracaoLigacaoSegundos(EntradaAbstrata.getDuracaoLigacaoSegundos(temp));
        entrada.setCusto(new Double(0.0));

        String destStr = null;
        if (tokenizer.hasMoreTokens()) {
            destStr = tokenizer.nextToken();
        } else {
            return null;
        }
        Telefone destino = null;

        if (destStr.length() == 8) {
            destino = new Telefone("035", destStr.substring(0, 4), destStr.substring(4));
        } else if (destStr.length() == 13) {
            plano += " " + destStr.substring(1, 3);
            destStr = "0" + destStr.substring(3);
            destino = new Telefone(destStr);
        } else {
            destino = new Telefone(destStr, true);
        }

        entrada.setPlanoLigacao(plano);
        entrada.setDestino(destino);

        if (tokenizer.hasMoreTokens()) {
            temp = tokenizer.nextToken();
        } else {
            return null;
        }
        String tipo = "";

        if (temp.equals("*")) {
            tipo = "chamada de entrada ainda não atendida";
        } else {
            int nTipo = Integer.parseInt(temp);
            switch (nTipo) {
                case 1:
                    tipo = "Chamada de entrada";
                    break;
                case 2:
                    tipo = "Chamada de saída";
                    break;
                case 5:
                    tipo = "Chamada de entrada transferida";
                    break;
                case 6:
                    tipo = "Chamada de saída transferida";
                    break;
                case 7:
                    tipo = "Conferência tripartida com chamada de entrada";
                    break;
                case 8:
                    tipo = "Conferência tripartida com chamada de saída";
                    break;
            }
        }

        entrada.setTipoDeLigacao(tipo);

        return entrada;
    }
}
